/**
 * 
 */
package com.mpo.ejb.persistence.dao.impl;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.mpo.common.util.SeguridadesException;
import com.mpo.ejb.persistence.dao.HistoricoClaveDAO;
import com.mpo.ejb.persistence.entities.HistoricoClave;

/**
 * @author 
 *
 */
public class HistoricoClaveDAOImpl extends AbstractFacadeImpl<HistoricoClave> implements HistoricoClaveDAO{
	
	private static final Logger slf4jLogger = LoggerFactory.getLogger(HistoricoClaveDAOImpl.class);
	
	public HistoricoClaveDAOImpl () {}
	
	public HistoricoClaveDAOImpl (EntityManager entityManager) {
		super(entityManager);
	}

	@Override
	public List<HistoricoClave> obtenerHistoricoClaveCriterios(HistoricoClave HistoricoClaveDTO) throws SeguridadesException {
		
		slf4jLogger.info("metodo obtenerHistoricoClaveCriterios	");
		
		List<HistoricoClave> listaClavesEncontradas = null;
		Predicate predicate = null;
		List<Predicate> criteriaList = null;
		
		try {
			
			CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
			CriteriaQuery<HistoricoClave> criteriaQuery = criteriaBuilder.createQuery(HistoricoClave.class);
			
			Root<HistoricoClave> rootHistoricoClave = criteriaQuery.from(HistoricoClave.class);
			
			CriteriaQuery<HistoricoClave> select = criteriaQuery.select(rootHistoricoClave);
			
			criteriaList = new ArrayList<Predicate>();
			
			//por idUsuario
			if ((Integer) HistoricoClaveDTO.getUsuario().getIdUsuario()!=null) {
				predicate = criteriaBuilder.equal(rootHistoricoClave.get("usuario").get("idUsuario"),(Integer) HistoricoClaveDTO.getUsuario().getIdUsuario());
				criteriaList.add(predicate);
			}
			
			//por passUsuario
			if (!StringUtils.isEmpty(HistoricoClaveDTO.getPassUsuario())) {
				predicate = criteriaBuilder.equal(rootHistoricoClave.get("passUsuario"), HistoricoClaveDTO.getPassUsuario());
				criteriaList.add(predicate);
			}
			
			criteriaQuery.where(criteriaBuilder.and(criteriaList.toArray(new Predicate[0])));
			
			TypedQuery<HistoricoClave> typedQuery = entityManager.createQuery(select);
			listaClavesEncontradas = typedQuery.getResultList();
			
		} catch (Exception e) {
			slf4jLogger.info("error al obtenerHistorioClavesCriterios: {}", e.toString());
			throw new SeguridadesException(e);
		}
		
		return listaClavesEncontradas;
		
	}

}
